package ar.unsam.tp.programa

import ar.unsam.tp.infraccion.Infraccion
import ar.unsam.tp.infraccion.InfraccionNula
import ar.unsam.tp.tipo.Tipo
import java.util.ArrayList
import java.util.List

class Jugador {
	@Property String nombre
	@Property Tipo tipoDeInscripcion
	@Property Infraccion infraccion
	@Property int edad
	private List<Calificacion> calificacionesRecibidas = new ArrayList<Calificacion>
	private List<Calificacion> calificacionesRechazadas = new ArrayList<Calificacion>

	new() {
		this.infraccion = new InfraccionNula()
	}

	new(String nom) {
		nombre = nom
		this.infraccion = new InfraccionNula()
	}

	def List<Calificacion> getCalificacionesRecibidas() {
		calificacionesRecibidas
	}

	def List<Calificacion> getCalificacionesRechazadas() {
		calificacionesRechazadas
	}

	def void setCalificacionesRecibidas(List<Calificacion> calificaciones) {
		calificacionesRecibidas = calificaciones
	}

	def void setCalificacionesRechazadas(List<Calificacion> calificaciones) {
		calificacionesRechazadas = calificaciones
	}

	def boolean contieneCalificacionRecibida(Calificacion calif) {
		calificacionesRecibidas.contains(calif)
	}

	def boolean contieneCalificacionRechazada(Calificacion calif) {
		calificacionesRechazadas.contains(calif)
	}

	def void addCalificacionRecibida(Calificacion calif) {
		calificacionesRecibidas.add(calif)
	}

	def void addCalificacionRechazada(Calificacion calif) {
		calificacionesRechazadas.add(calif)
	}

	def void removeCalificacionRecibida(Calificacion calif) {
		calificacionesRecibidas.remove(calif)
	}

	def void removeCalificacionRechazada(Calificacion calif) {
		calificacionesRechazadas.remove(calif)
	}

	def Calificacion crearCalificacion(Jugador calificado, int puntos, String nota) {
		var calificacion = new Calificacion(puntos, nota)
		calificacion.setJugadorCalificador(this)
		calificacion.setJugadorCalificado(calificado)
		calificacion
	}

	def void penaliza(Infraccion infraccion) {
		setInfraccion(infraccion)
		infraccion.penalizar
	}

	override String toString() {
		nombre + ": " + tipoDeInscripcion.toString
	}

	def void verificar(Partido partido) {
		this.tipoDeInscripcion.verificar(partido)
	}
}
